<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script>



//【示例1】数学上常用的阶乘函数、幂函数和斐波那契数列。以阶乘函数为例，对于这种递归定义的函数，可以使用递归过程来求解：
var f = function( x ){
    if ( x < 2 )
        return 1;								// 递归终止条件
    else 
        return x * arguments.callee( x - 1 ); 	// 递归调用过程
}
alert( f( 20 ) );		// 返回20的阶乘值为2 432 902 008 176 640 000
//【示例2】文档树就是一种递归的数据结构，下面使用递归运算来计算指定节点内所包含的全部节点数。


function f( n ){ 				// 统计指定节点及其所有子节点的个数
    var l = 0 ; 				// 初始化计数变量
    if( n.nodeType == 1 ) 		// 如果是元素节点，则计数
        l ++ ; 	// 递加计数器
    var child = n.childNodes; 	// 获取子节点集合
    for( var i = 0; i < child.length; i ++ ){ 	// 遍历所有子节点
        l += f( child[i] ); 		// 递归运算，统计当前节点下所有子节点数
    }
    return l; 					// 返回节点数
}
window.onload = function(){	// 绑定页面初始化事件处理函数
    var body = document.getElementsByTagName("body")[0]; 
    // 获取当前文档中body节点句柄
    alert( f( body ) ) 			// 返回2，即body和script两个节点
}


function f( n, a, b, c ){
    if( n == 1 ) 				// 特殊处理
        document.write( a + " &rarr; " + c + "<br />" ); 
		// 输出显示，直接让参数a移给c
    else{
        f( n - 1, a, c, b ); 	// 递归调用函数，调整参数顺序，让参数a移给b
        document.write( a + " &rarr; " + c + "<br />" ); 
		// 输出显示
        f( n - 1, b, a, c ); 
		// 如果当n等于1时，调整参数顺序，让参数b移给c
    }
}
f( 3, "A", "B", "C" ); 		// 调用函数


</script>
</head>
<body>




</body>
</html>
